[アップデート] Amazon S3 の ls コマンドにバケットリージョンとバケットプレフィックスを指定するオプションが追加されました
いわさです。
AWS CLI を使って S3 バケットを操作することが出来るのですが、S3 コマンドには High-Level と Low-Level という異なる階層のコマンドが提供されています。
aws s3
が High-Level コマンド、aws s3api
は Low-Level コマンドとなっており、前者は S3 に関する基本的なタスクを簡単に実行するために用意されているコマンドで、後者は S3 API のすべてのオペレーション(High-Level で公開されていない API やオプション)にアクセスが出来るコマンドです。
両者で何ができて何ができないのか、以下の記事で比較されておりわかりやすいと思います。
雑に言うとは基本的な S3 の操作であればaws s3
で足りるしサッと使えるんだけど、ちょっと難しいことやろうとするとそれだと出来ないので、aws s3api
をリファレンス見ながら使おうね。という感じです。
そんな High-Level のs3
コマンドですが、これまでs3api
でのみ使えた一部のオプションが使えるようになりました。
AWS CLI の 1.36.35 で導入されたようで、具体的にはs3 ls
コマンドで--bucket-name-prefix
と--bucket-region
が使えるようになりました。
バージョン確認
そうか。お前使えなかったんか。という感じもしますが、まずはバージョンアップ前のヘルプを見てみます。
% aws --version
aws-cli/2.22.7 Python/3.12.6 Darwin/23.6.0 exe/x86_64
NAME
ls -
DESCRIPTION
List S3 objects and common prefixes under a prefix or all S3 buckets.
Note that the --output and --no-paginate arguments are ignored for this
command.
SYNOPSIS
ls
<S3Uri> or NONE
[--recursive]
[--page-size <value>]
[--human-readable]
[--summarize]
[--request-payer <value>]
[--debug]
[--endpoint-url <value>]
[--no-verify-ssl]
[--no-paginate]
[--output <value>]
[--query <value>]
[--profile <value>]
[--region <value>]
[--version <value>]
[--color <value>]
[--no-sign-request]
[--ca-bundle <value>]
[--cli-read-timeout <value>]
[--cli-connect-timeout <value>]
[--cli-binary-format <value>]
[--no-cli-pager]
[--cli-auto-prompt]
[--no-cli-auto-prompt]
たしかに、指定出来そうなオプションがないですね。
ではバージョンアップ後も同じように確認してみましょう。
NAME
ls -
DESCRIPTION
List S3 objects and common prefixes under a prefix or all S3 buckets.
Note that the --output and --no-paginate arguments are ignored for this
command.
SYNOPSIS
ls
<S3Uri> or NONE
[--recursive]
[--page-size <value>]
[--human-readable]
[--summarize]
[--request-payer <value>]
[--bucket-name-prefix <value>]
[--bucket-region <value>]
[--debug]
:
なるほど、追加されています。
この 2 つのコマンドは内部的にはs3api list-buckets
コマンドの--prefix
と--bucket-region
パラメータと同じ挙動となっているようです。
使ってみますか。
bucket-region オプション
まずは普通のs3 ls
です。当然ながら全リージョンのバケットが出力されるのですが、検索対象のバケットリージョンを指定できます。
% aws s3 ls --bucket-region ap-northeast-1
2024-12-31 05:20:17 amplify-amplifyvitereactt-amplifydataamplifycodege-hrwnvnltxy1o
2024-12-25 13:58:05 amplify-classmethodgameda-amplifydataamplifycodege-25t9zxrau9o3
2024-11-08 06:31:00 amplify-d1e3wqqe5zr0h5-ho-amplifydataamplifycodege-k7pktzukjlrq
2024-11-09 11:16:17 amplify-d1e3wqqe5zr0h5-ma-amplifydataamplifycodege-04jl1fa7rtg1
:
2024-11-14 07:29:02 terraform-state-123456789012
2024-11-21 08:01:28 viteproject31f4192f6a434afa82f014082eb4f45b17fe4-dev
オプションなしと比較してみます。おそらく東京リージョン以外のバケットが 19 件あるみたいです。
% aws s3 ls --bucket-region ap-northeast-1 | wc -l
162
% aws s3 ls | wc -l
181
ちなみにこのオプションを使うとリージョナルエンドポイントにアクセスする形になるようです。
なので、グローバルオプションのリージョンと合わせる必要があるみたいです。(私のプロファイルはデフォルトが東京リージョン)
% aws s3 ls --bucket-region us-east-1
An error occurred (InvalidArgument) when calling the ListBuckets operation: Requests with bucket-region specified must be made to the corresponding regional endpoint
% aws s3 ls --bucket-region us-east-1 --region us-east-1
2023-05-03 06:44:56 aws-athena-query-results-123456789012-us-east-1
2023-03-02 18:50:13 aws-sam-cli-managed-default-samclisourcebucket-c816u3vzg9j
2023-04-04 09:24:43 aws-supply-chain-accesslogsc2cc22fa-d532-49ef-aceb-f4085956d346
2023-04-04 09:24:43 aws-supply-chain-data-c2cc22fa-d532-49ef-aceb-f4085956d346
2021-11-03 20:49:22 cf-templates-1nzt35y956ufp-us-east-1
2022-08-14 05:54:05 cw-syn-results-123456789012-us-east-1
2022-01-26 14:52:44 efs-web-efsfilewebapplication-16yfs6i1smd6h-website
2021-12-27 14:13:47 hoge-chime-stack-chatattachmentsbucket-l55n14a2ke1t
2024-08-03 10:49:32 hoge0803modelcustom
2023-01-17 13:42:28 microserviceextractorfordotnet
2022-01-12 16:36:39 rain-artifacts-123456789012-us-east-1
念の為見え方の違いを確認しますが、s3api list-buckets
だと次のような感じです。
冒頭の記事で比較されているように日付が UTC だったり、出力形式が JSON だったりですね。
% aws s3api list-buckets --bucket-region ap-northeast-1
{
"Buckets": [
{
"Name": "amplify-amplifyvitereactt-amplifydataamplifycodege-hrwnvnltxy1o",
"CreationDate": "2024-12-30T20:20:17+00:00",
"BucketRegion": "ap-northeast-1"
},
{
"Name": "amplify-classmethodgameda-amplifydataamplifycodege-25t9zxrau9o3",
"CreationDate": "2024-12-25T04:58:05+00:00",
"BucketRegion": "ap-northeast-1"
},
:
bucket-name-prefix オプション
続いてbucket-name-prefix
オプションも確認してみます。
バケット名のプレフィックスを指定出来る感じですね。私はよく検証用のバケットを「hoge」から始めることがあるので、それだけ抽出してみます。
% aws s3 ls --bucket-name-prefix hoge
2024-11-13 15:13:11 hoge-athena-queri-result
2021-12-27 14:13:48 hoge-chime-stack-chatattachmentsbucket-l55n14a2ke1t
2024-11-21 06:21:31 hoge-iwasa-fis-lambda
2024-11-10 06:56:16 hoge0108resourcelist
2024-11-10 06:56:16 hoge0108userlist
2024-11-13 15:13:12 hoge0109array
2024-11-13 15:13:12 hoge0109resourcelist
2024-11-10 06:56:16 hoge0109tmp
2024-11-13 15:13:12 hoge0109userlist
2024-11-13 15:13:12 hoge0123backup
2024-11-21 06:21:31 hoge0201qs
2024-11-13 15:13:12 hoge0208datasync1
2024-11-13 15:13:12 hoge0208datasync2
:
2024-11-13 15:13:15 hogepipeline-pipelineartifactsloggingbucket-1m2b97z4dhoyb
2024-11-10 06:56:18 hogepipeline-pipelineartifactsloggingbucket-3n0qlkhb3smi
2024-11-13 15:13:15 hogepipeline-pipelineartifactsloggingbucket-6ahxl4lu98s3
2024-11-10 06:56:18 hogesesreceive
2024-11-13 15:13:15 hogestoragelensexport
hoge から始まるバケットだけが抽出されましたね。
ちなみにこちらs3api list-buckets
だとこうなります。
% aws s3api list-buckets --prefix hoge
{
"Buckets": [
{
"Name": "hoge-athena-queri-result",
"CreationDate": "2024-11-13T06:13:11+00:00",
"BucketRegion": "ap-northeast-1"
},
{
"Name": "hoge-chime-stack-chatattachmentsbucket-l55n14a2ke1t",
"CreationDate": "2021-12-27T05:13:48+00:00",
"BucketRegion": "us-east-1"
},
:
さいごに
本日は High-Level S3 の ls コマンドにバケットリージョンとバケットプレフィックスを指定するオプションが追加されたので試してみました。
私は普段よくs3api
を使うので、いままでこのオプション指定できなかったのかとちょっと驚きました。地味に嬉しいアップデートなのではないでしょうか。
s3 ls
をよくお使いの方は今回のオプション使ってみてください。